AWS Systems Manager 파라미터 스토어에 파라미터 저장해두고 CLI로 취득해보기
안녕하세요, 임채정입니다.
이번 블로그에서는 파라미터 스토어에 대해서 알아보고 실제로 사용해보려고 합니다.
아젠다
- 파라미터 스토어란
- 파라미터 스토어에 파라미터 생성
- CLI에서 파라미터 취득해보기
- 마무리
1. 파라미터 스토어란
- 구성 데이터 관리 및 암호 관리를 위한 안전한 계층적 스토리지를 제공
- 파라미터를 생성할 때 지정한 고유 이름을 지정해서 스크립트, 명령어 등에서 참조 가능
- 이하의 데이터 등을 파라미터 값으로 저장
- 암호
- 데이터베이스 문자열
- Amazon Machine Image(AMI) ID
- 라이선스 코드
- 저장 값 종류
- 문자열
- 문자열 목록
- 암호화된 데이터
2. 파라미터 스토어에 파라미터 생성
실제로 파라미터 스토어에 파라미터를 생성해보겠습니다.
AWS Systems Manager 콘솔화면에서 [파라미터 스토어] 태그로 이동합니다.
그리고 새로운 파라미터 생성을 클릭합니다.
이번에는 테스트를 위해 3개정도의 파라미터를 만들겠습니다.
[DB의 URL]
이름: /app/dev/db-url
유형: 문자열
값: mysql://ssmtest:3306
[DB의 비밀번호]
이름: /app/dev/db-password
유형: 보안 문자열
값: password2022
[EC2의 AMI ID]
이름: /EC2/AMI-ID
유형: 문자열
값: ami-081e8fe2fd01c823f
이렇게 3개의 파라미터를 작성했으니까 다음으로 CLI에서 해당 파라미터를 얻어봅시다.
3. CLI에서 파라미터 취득해보기
CLI에서 다양한 방법으로 파라미터를 취득해보겠습니다.
파라미터 취득하기
평범하게 /EC2/AMI-ID
에 대한 파라미터를 취득하는 명령어입니다.
aws ssm get-parameters --names /EC2/AMI-ID { "Parameters": [ { "Name": "/EC2/AMI-ID", "Type": "String", "Value": "ami-081e8fe2fd01c823f", "Version": 1, "LastModifiedDate": "2022-04-28T13:35:48.911000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/EC2/AMI-ID", "DataType": "text" } ], "InvalidParameters": [] }
보안 문자열을 복호화해서 취득하기
/app/dev/db-url
와 /app/dev/db-password
를 그냥 가져오면 /app/dev/db-url
의 값은 그냥 가져와지지만 보안 문자열인 /app/dev/db-password
은 암호화된 문자열로 출력됩니다.
aws ssm get-parameters --names /app/dev/db-url /app/dev/db-password { "Parameters": [ { "Name": "/app/dev/db-password", "Type": "SecureString", "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=", "Version": 1, "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password", "DataType": "text" }, { "Name": "/app/dev/db-url", "Type": "String", "Value": "mysql://ssmtest:3306", "Version": 1, "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url", "DataType": "text" } ], "InvalidParameters": [] }
하지만 --with-decryption
옵션을 붙여주면 보안 문자열이 복호화되서 출력됩니다.
aws ssm get-parameters --names /app/dev/db-url /app/dev/db-password --with-decryption { "Parameters": [ { "Name": "/app/dev/db-password", "Type": "SecureString", "Value": "password2022", "Version": 1, "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password", "DataType": "text" }, { "Name": "/app/dev/db-url", "Type": "String", "Value": "mysql://ssmtest:3306", "Version": 1, "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url", "DataType": "text" } ], "InvalidParameters": [] }
경로(path)로 취득하기
이번에는 경로로 파라미터를 취득해보겠습니다.
/app/dev/
경로에 있는 모든 파라미터를 취득합니다.
aws ssm get-parameters-by-path --path /app/dev/ { "Parameters": [ { "Name": "/app/dev/db-password", "Type": "SecureString", "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=", "Version": 1, "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password", "DataType": "text" }, { "Name": "/app/dev/db-url", "Type": "String", "Value": "mysql://ssmtest:3306", "Version": 1, "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url", "DataType": "text" } ] }
하지만 /app/
의 경우 경로 바로 뒤에 파라미터가 없기 때문에 결과가 표시되지 않습니다.
aws ssm get-parameters-by-path --path /app/ { "Parameters": [] }
이럴 경우에는 --recursive
옵션이 붙으면 /app/
으로 시작되는 모든 파라미터를 출력합니다.
aws ssm get-parameters-by-path --path /app/ --recursive { "Parameters": [ { "Name": "/app/dev/db-password", "Type": "SecureString", "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=", "Version": 1, "LastModifiedDate": "2022-04-28T02:39:49.583000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-password", "DataType": "text" }, { "Name": "/app/dev/db-url", "Type": "String", "Value": "mysql://ssmtest:3306", "Version": 1, "LastModifiedDate": "2022-04-28T02:38:55.488000+09:00", "ARN": "arn:aws:ssm:ap-northeast-1:763723081076:parameter/app/dev/db-url", "DataType": "text" } ] }
쿼리를 통해 부분 값만 취득하기
이번에는 필요한 부분만 취득하겠습니다.
/app/dev/db-url
와 /app/dev/db-password
의 이름과 값
aws ssm get-parameters --names /app/dev/db-url /app/dev/db-password --query "Parameters[*].{Name:Name,Value:Value}" [ { "Name": "/app/dev/db-password", "Value": "AQICAHiyx8ItwrAKNY8Ly6JZE6F/HmLQM0m2KCAn0EugOMV+nwEBQpnRaEIZly65xY9eZ3bYAAAAajBoBgkqhkiG9w0BBwagWzBZAgEAMFQGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6FczyjAUfftwcIh9AgEQgCcFi7/hjdrZdajgXlE+hWFlGaFMc1RxTzY5xw0gIxUxjiEboh+1upY=" }, { "Name": "/app/dev/db-url", "Value": "mysql://ssmtest:3306" } ]
/EC2/AMI-ID
의 값만 출력
aws ssm get-parameters --names /EC2/AMI-ID --query "Parameters[*].Value" [ "ami-081e8fe2fd01c823f" ]
4. 마무리
지금까지 AWS Systems Manager 의 파라미터 스토어에 대해서 알아봤습니다.
다음은 여기서 좀 더 응용을 해서 해당 파라미터 값을 CloudFormation의 템플릿에서 사용하는 방법에 대해서 알아보겠습니다.
본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !